#ifndef BAIFA_CLOUD_CLIENT_H
#define BAIFA_CLOUD_CLIENT_H

#include <QObject>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QString>
#include <QJsonObject>

class BaifaCloudClient:public QObject
{
    Q_OBJECT;
public:
    explicit BaifaCloudClient(QObject *parent = nullptr);

    //设置用户uid
    void setUid(const QString  &uid);

    //获取设备列表
    void getDeviceList();

    //通过分组获取设备列表
    void getDevicesByGroup(const QString &group = "");

    //获取指定设备的详细信息
    void getDeviceInfo(const QString &topic);

    //获取指定设备的最新状态数据
    void getDeviceData(const QString &topic);

    //获取所有设备分组
    void getAllGroups();

signals:
    //设备列表获取结果
    void deviceListReceived(const QJsonArray &devices);

    //设备详细信息获取结果
    void deviceInfoReceived(const QJsonObject &deviceInfo);

    //设备数据获取结果
    void deviceDataReceived(const QString &topic,const QJsonObject &data);

    //设备分组获取结果
    void deviceGroupsReceived(const QJsonArray &groups);

    //错误信息
    void errorOccurred(const QString &errorMsg);
private slots:
    void onReplyFinished(QNetworkReply *reply);

private:
    QNetworkAccessManager *m_manger;
    QString m_uid;
    QString m_baseUrl;

    //解析设备列表响应
    void parseDeviceList(const QByteArray &data);

    //解析设备信息响应
    void parseDeviceInfo(const QByteArray &data);

    //解析设备数据响应
    void parseDeviceData(const QByteArray &data,const QString &topic);

    //解析设备分组响应
    void parseDeviceGroups(const QByteArray &data);

};

#endif // BAIFA_CLOUD_CLIENT_H
